package hacky.filebased.agent;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;

public class FileUtilities {
    public static byte[] readGeneratedClassFile(File fileWritten) {
        try {
            RandomAccessFile randomAccessFile = new RandomAccessFile(
                    fileWritten, "r");
            int length = (int) randomAccessFile.length();
            byte[] fullClassFile = new byte[length];
            randomAccessFile.readFully(fullClassFile);
            randomAccessFile.close();
            return fullClassFile;
        } catch (Exception e) {
            e.printStackTrace(System.err);
            return null;
        }
    }

    public static File writeClassFile(File tempDirectory,
            String fullyQualifiedClassName, byte[] classfileBuffer)
            throws FileNotFoundException, IOException {
        String className = fullyQualifiedClassName.replaceAll(".*/", "");
        File classFile = new File(tempDirectory, className + ".class");
        FileOutputStream fileOutputStream = new FileOutputStream(classFile);
        fileOutputStream.write(classfileBuffer);
        fileOutputStream.close();
        return classFile;
    }

    public static File createTemporaryDirectory(String name) throws IOException {
        File tempDirectory = new File(name);

        if (tempDirectory.exists() && tempDirectory.isFile()) {
            tempDirectory.delete();
        }

        if (tempDirectory.exists() && tempDirectory.isDirectory()) {
            clearAllFiles(tempDirectory);
            tempDirectory.delete();
        }
        tempDirectory.mkdir();

        return tempDirectory;
    }

    public static void clearAllFiles(File directory) {
        String[] files = directory.list();
        for (String currentFile : files)
            new File(currentFile).delete();
    }

}
